package beans;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Hashtable;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import beans.SolicitudResumenCuentaCLI;
import entidades.*;



@Stateless
@WebService(name = "ResumenCuentaCLI", serviceName = "ResumenCuentaCLI")
public class SolicitudResumenCuentaCLIBean implements SolicitudResumenCuentaCLI {

	
	@PersistenceContext(unitName="SolicitudResumenCuentaCLI")
	private EntityManager manager;
	@EJB
	private AdministradorFacturas adminFacturas;
	
	@WebMethod
	public ResumenCuenta generarResumenCuenta(Cliente c){
		
		
		ResumenCuenta rc = new ResumenCuenta();
		
		// Este es un WebMethod
		// Para generar y devolver Resumen de Cuenta al cliente.
		
		/**********************************************
		 * 
		 * Tengo que presentar al cliente:
		 * 
		 * - Saldo Actual de la CC (1)
		 * - Operaciones del ultimo Mes (2)
		 * - Operaciones Pendientes (3)
		 * 
		 */
		
		
		// Traigo el cliente con su cuenta corriente y 
		// regreso el saldo. (1)
		Cliente cli = manager.find(Cliente.class, c.getId());
		float saldoActual = cli.getCuentaCorriente().getSaldoactual();
		
		
		rc.setOperacionesFacturadas(adminFacturas.getFacturasCliente(c));
		
		// Le incorporo el saldo al resumen de cuenta
		rc.setSaldoActual(saldoActual);
		
	
		// Calcular los ultimos 30 dias (el ultimo mes). 
		Date hoy = new Date();
		Calendar cal = new GregorianCalendar();
		cal.setTime(hoy);
		cal.add(Calendar.DAY_OF_MONTH, -30);
		Date ultimos30dias = cal.getTime();
		
		
		
		
		/**************************************++
		 * 
		 * 
		 * Llamar a la fachada, para que llame al bean.
		 * 
		 * 
		 * 
		 */
	
    	   
		// TraerOrdenesCompra cuya fecha sea >= a ultimos 30 dias
		// Traer todos los pagos cuya fecha sea >= a ultimos 30 dias
		
		
		// Buscar operaciones pendientes de entrega, por cada orden de compra asociada a este cliente, sumar todos los items facturados y 
		// compararlos con la cantidad de items en la orden de compra.
		
		// Operaciones del ultimo mes: 
		// Recorrer los pagos que haya hecho el cliente con fecha dentro de los ultimos 30 dias.
				
		
		
		return (rc);
		
	}
	
	
}
